package ar.com.tallerdos.smartdinner.sync;

import java.util.List;

import ar.com.tallerdos.smartdinner.business.ComidaBusiness;
import ar.com.tallerdos.smartdinner.model.Comida;
import ar.com.tallerdos.smartdinner.util.Identidad;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;

public class ComidasFacturadas extends Tarea {

    private static final String COMIDAS_FACTURADAS_SERVICE = "comidasFacturadas.php";
    private static final String SEPARADOR = ",";

    @Override
    public Integer realizarTarea() {

	List<Comida> comidas = ComidaBusiness.findComidasCerradasSinFacturar();
	if (!comidas.isEmpty()) {

	    String ids = concatenarIds(comidas);
	    String response = llamarWebService(SERVER_URL + "/"
		    + COMIDAS_FACTURADAS_SERVICE + "?" + "pedido_ids=" + ids);

	    List<Identidad> comidasIds = parsearJson(response);
	    if (comidasIds != null) {
		for (Identidad id : comidasIds) {
		    Comida comida = ComidaBusiness.findByCodigo(id.getId());
		    if (comida != null) {
			comida.setFacturado(true);
		    }
		}
	    }

	}

	return null;
    }
    
    private String concatenarIds(List<Comida> comidas) {
	String identitiesIds = "";
	for (Comida identity : comidas) {
	    identitiesIds += identity.getCodigo() + SEPARADOR;
	}
	if (identitiesIds.length() > 0) {
	    identitiesIds = identitiesIds.substring(0, identitiesIds.length() - SEPARADOR.length());
	}
	return identitiesIds;
    }

    private List<Identidad> parsearJson(String response) {
	Gson gson = new GsonBuilder().create();

	List<Identidad> ids = gson.fromJson(response,
		new TypeToken<List<Identidad>>() {
		}.getType());

	return ids;
    }

}
